haproxy 根据cookie实现灰度发布

前言

一般我们把环境分为:开发环境,测试环境,灰度环境以及生产环境;其中,灰度环境相当于准生产环境,当有改动比较大的特性上线之前(例如:网站改版等),往往会先上到灰度环境,将一部分生产环境的流量引到灰度环境,进行一个小范围的公测;以此搜集用户的反馈,即时改进。避免直接部署到生产环境,如果出现问题,影响会很大;下面将介绍haproxy如何根据cookie进行分流。

实现灰度发布

网络结构图:
image

haproxy 配置如下:

frontend http-in
bind *:80
log global
acl grayFlag req.cook(environment_cookie) -i gray
use_backend servers_gray_environment if grayFlag
default_backend servers_production_environment

//生产环境集群
backend servers_production_environment
mode http
option httpchk GET /lpp-web/monitor.html
server app_tomcat115 10.116.84.115:800 cookie production_web115 check inter 3000 rise 3 fall 3 weight 1
server app_tomcat116 10.116.84.116:800 cookie production_web116 check inter 3000 rise 3 fall 3 weight 1
server app_tomcat117 10.116.84.117:800 cookie production_web117 check inter 3000 rise 3 fall 3 weight 1

//灰度环境集群
backend servers_gray_environment
mode http
option httpchk GET /lpp-web/monitor.html
server app_tomcat112 10.116.84.112:800 cookie gray_web112 check inter 3000 rise 3 fall 3 weight 1
server app_tomcat109 10.116.84.109:800 cookie gray_web109 check inter 3000 rise 3 fall 3 weight 1

总结

可以在应用层,通过算法(如:切生产环境10%的流量到灰度环境等)设置用户访问cookie(如:environment_cookie:gray),然后进行重定向,这样用户就会访问到灰度环境下。这也是实现AB测试的一种方式。